// 抽象类：包含抽象方法（抽象方法一般没有任何的具体内容的实现），也可以包含实例化，抽象是不能被实例化的，为了让子类进行实例化及实现内部的抽象方法
//抽象类的目的或者是作用最终都是为子类服务的
(()=>{
    // 定义一个抽象类
    abstract class Animal{

        // 抽象属性
        // abstract name:string

        // 抽象方法
        abstract eat()

        // 报错，抽象方法不能有具体的实现
        // abstract eat(){
        //     console.log("吃东西")
        // }

        // 实例方法
        sayHi(){
            console.log("sayHifangfa")
        }
    }
    // 定义一个子类（派生类Dog）
    class Dog extends Animal{
        // name:string = "小guo子"
        // 重新的实现抽象类中的方法，此时这个方法就是当前Dog类的实例方法
        eat(){
            console.log("小狗，添着吃")
        }
    }

    // 实例化Dog的对象
    const dog:Dog = new Dog()
    dog.eat()
    // 调用的是抽象类中的实例方法
    dog.sayHi()
    // console.log(dog.name)



    // 不能实例化抽象类的对象
    // console ani:Animal = new Animal()    //错误

})()